#include <stdio.h>
#include <iostream>
#include <string.h>
typedef struct node
{
    char data;
    struct node *next;
}*stack1;
//void createstack(stack1 &s);
void destroystack(stack1 &s);
void  symmetry(char str[]);
void push(stack1 &s,char e);
int pop(stack1 &s,char e);
int main()
{
    char str[100];
    gets(str);
    stack1 s;
    //s=new node;
    s=new node;
    s->next=NULL;
    symmetry(str);
    //createstack(s);

   /* int a;
    a=;
     if(a==1)//
        printf("yes");
   else ab printf("no"); */
    destroystack(s);

}
//void createstack(stack1 &s)
//{
 //   s=new node;
 //   s->next=NULL;
//}
void destroystack(stack1 &s)
{
    stack1 p=s,q=s->next;
    while(q!=NULL)
    {
        delete(p);
        p=q;
        q=q->next;
    }
    delete(p);
}
void symmetry(char str[])
{
    int i;
    char e;
    stack1 s;
    s=new node;
    s->next=NULL;
    for(i=0;i<strlen(str);i++)//str[i]!='0'"\n"
    {
        push(s,str[i]);
    }
    for(i=0;i<strlen(str);i++)//str[i]!='0'
    {
        pop(s,e);
        if(str[i]!=e)
        {
            destroystack(s);
            printf("no");
            return;
        }
     }
    destroystack(s);
   printf("yes");
   return;
}
void push(stack1 &s,char e)
{
    stack1 p;
    p=new node;
    p->data=e;
    p->next=s->next;
    s->next=p;
}
int pop(stack1 &s,char e)
{
    stack1 p;
    if(s->next==NULL)
        return -1;
    p=s->next;
    e=p->data;
    s->next=p->next;
    delete(p);
    return 1;
}
